#ifndef SHOWFACTORYFORTEST_H
#define SHOWFACTORYFORTEST_H

#include "ShowFactory.h"

class ShowFactoryForTest : public IF_ShowFactoryInterface
{
   Q_OBJECT
public:
   explicit ShowFactoryForTest( int numOfLightChannels, QObject *parent = 0);

   // IF_ShowFactoryInterface interface
public:
   virtual IF_ShowGuiInterface *buildShowGui();

   virtual ShowLoader *buildShowLoader(IF_ShowGuiInterface *selectDialog,
                                       MediaListModel *mediaModel,
                                       LightPresetModel *lightModel,
                                       SequenceModel *sequenceModel,
                                       IF_ScriptEngineInterface *scriptInterafce);

   virtual IF_ShowWriterInterface *buildShowWriter(ShowFileFormatter *formatter);

   virtual ShowFileFormatter *buildShowFileFormatter(const IF_ScriptEngineInterface &script,
                                                     const QAbstractListModel &mediaModel,
                                                     const QAbstractListModel &lightsetModel,
                                                     const QAbstractListModel &sequenceModel);

   virtual void deleteShowGui(IF_ShowGuiInterface *showGui);
   virtual void deleteShowLoader(ShowLoader *showLoader);
   virtual void deleteShowWriter(IF_ShowWriterInterface *showWriter);
   virtual void deleteShowFileFormatter(ShowFileFormatter *formatter);

   // mock funcitons
   void setNotificationLog( QStringList *log) {
      m_notificationLog = log;
   }

   void setUserSelectedFilePath( const QString &filePath) {
      m_userSelectedFilePath = filePath;
   }

private:
   /**
    * a string list passed by test SW, where all messages that
    * GUI should notify are logged.
    */
   QStringList *m_notificationLog;

   /**
    * this string will be passed to GUI interface to mock
    * the file path that user would select through GUI
    */
   QString m_userSelectedFilePath;

   /**
    * @brief number of channels for light set (DMX)
    */
   int m_numOfLightChannels;
};

#endif // SHOWFACTORYFORTEST_H
